﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using ITAP.Core.Calculations;
using ITAP.Core.Modelling;

namespace ITAP.ContourBuilder.Manipulation
{
    public delegate void PeripheryEvent(GlobalPeripheryState state);

    public interface ICommand : ICloneable, IExecutable
    {
        CommandState State { get; }
        
        event ManipulatorEvent StateChanged;
        //void Execute();
        void Terminate();
        void Undo();
        void Redo();
        string Name { get; }
        bool CanUndo { get; }
        bool Enabled { get; set; }
        void ObtainPeripheryState(GlobalPeripheryState state);
        bool DisableObtainPeripheryState { get; set; }
        void DrawOnGraphics(Graphics g, int screenWidth, int screenHeight, RectangleF modelRectangle, ModelPoint cameraCenter, ModelCoordinateConverter coordinateConverter);
        bool AllowMultipleInstances { get; }
        void SaveToHistory();
    }
}
